package com.bawei.lib_common.utils

import android.content.Context
import android.os.SystemClock
import android.util.Log
import kotlinx.coroutines.*

/**
 * 启动优化工具类
 * 用于监控和优化应用启动时间
 */
object StartupOptimizer {
    private const val TAG = "StartupOptimizer"
    
    private var startTime = 0L
    private var coldStartTime = 0L
    private var warmStartTime = 0L
    
    // 启动阶段标记
    private val stageTimes = mutableMapOf<String, Long>()
    
    // 更新警告阈值，适应优化后的启动时间
    private const val WARNING_THRESHOLD_MS = 4000L // 从5000ms降低到4000ms
    private const val CRITICAL_THRESHOLD_MS = 6000L // 从8000ms降低到6000ms
    
    // 阶段耗时警告阈值
    private const val STAGE_WARNING_THRESHOLD_MS = 1000L // 单个阶段超过1秒警告
    private const val STAGE_CRITICAL_THRESHOLD_MS = 2000L // 单个阶段超过2秒严重警告
    
    /**
     * 开始记录启动时间
     */
    fun startRecord() {
        startTime = SystemClock.elapsedRealtime()
        Log.d(TAG, "应用启动开始记录时间: $startTime")
    }
    
    /**
     * 记录启动阶段
     */
    fun recordStage(stageName: String) {
        val currentTime = SystemClock.elapsedRealtime()
        val duration = currentTime - startTime
        stageTimes[stageName] = duration
        Log.d(TAG, "启动阶段 [$stageName]: ${duration}ms")
    }
    
    /**
     * 完成启动记录
     */
    fun finishRecord(isColdStart: Boolean = true) {
        val totalTime = SystemClock.elapsedRealtime() - startTime
        
        if (isColdStart) {
            coldStartTime = totalTime
            Log.i(TAG, "冷启动完成，总耗时: ${totalTime}ms")
        } else {
            warmStartTime = totalTime
            Log.i(TAG, "热启动完成，总耗时: ${totalTime}ms")
        }
        
        // 输出各阶段耗时
        stageTimes.forEach { (stage, time) ->
            Log.d(TAG, "阶段 [$stage]: ${time}ms")
        }
        
        // 清理数据
        stageTimes.clear()
    }
    
    /**
     * 获取启动时间统计
     */
    fun getStartupStats(): StartupStats {
        return StartupStats(
            coldStartTime = coldStartTime,
            warmStartTime = warmStartTime,
            stageTimes = stageTimes.toMap()
        )
    }
    
    /**
     * 预加载优化建议
     */
    fun getOptimizationSuggestions(): List<String> {
        val suggestions = mutableListOf<String>()
        
        if (coldStartTime > 5000) {  // 调整为5秒
            suggestions.add("冷启动时间过长(${coldStartTime}ms)，建议优化Application初始化")
        }
        
        if (warmStartTime > 2000) {  // 调整为2秒
            suggestions.add("热启动时间过长(${warmStartTime}ms)，建议优化Activity创建")
        }
        
        return suggestions
    }
    
    /**
     * 启动统计数据结构
     */
    data class StartupStats(
        val coldStartTime: Long,
        val warmStartTime: Long,
        val stageTimes: Map<String, Long>
    )
}

/**
 * 启动优化配置
 */
object StartupConfig {
    // 是否启用启动优化
    const val ENABLE_STARTUP_OPTIMIZATION = true
    
    // 最小启动显示时间
    const val MIN_SPLASH_DISPLAY_TIME = 1500L  // 调整为1.5秒
    
    // 最大启动显示时间
    const val MAX_SPLASH_DISPLAY_TIME = 3000L
    
    // 是否启用异步初始化
    const val ENABLE_ASYNC_INIT = true
    
    // 是否启用预加载
    const val ENABLE_PRELOAD = true
} 